// export const changeDoneById = (id) => {
//   return { type: 'changeDoneById', id }
// }

import { CHANGE_DONE_TODO, DEL_TODO } from './actionTypes'

// 模拟的接口
const addTodoAPI = () => {
  return new Promise((reslove) => {
    reslove({ id: Date.now(), content: '添加到后台的Todo', done: false })
  })
}

// 👍 通过常量存储字符串，书写时可以有代码提示
export const changeDoneById = (id) => ({ type: CHANGE_DONE_TODO, id: id })
export const delById = (id) => ({ type: DEL_TODO, id: id })

// redux-thunk 源码核心，判断 action 是否为一个函数，如果时函数，中间件内部调用
//  if (typeof action === 'function') {
//    return action(dispatch, getState, extraArgument);
//  }
export const addTodoAsync = () => {
  // 💥💥 最重要就是，处理异步 action 需要返回一个函数
  return async (dispatch) => {
    // 异步请求
    const res = await addTodoAPI()
    // 最终调用 dispatch，传入普通对象
    dispatch({ type: 'todo/add', payload: res })
  }
}
